package es.tikitaka.actions.mantenimiento;

import java.util.List;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.faces.FacesMessages;

import es.tikitaka.dao.AniosDicService;
import es.tikitaka.dao.ColegiosDicService;
import es.tikitaka.dao.HorasDicService;
import es.tikitaka.dao.MunicipioDicService;
import es.tikitaka.dao.PerfilDicService;
import es.tikitaka.dao.PieDicService;
import es.tikitaka.dao.PosicionDicService;
import es.tikitaka.dao.ProvinciaDicService;
import es.tikitaka.dao.TipoAmonestacionDicService;
import es.tikitaka.dao.TipoGolDicService;
import es.tikitaka.dao.TipoSancionDicService;
import es.tikitaka.dao.TrofeoDicService;
import es.tikitaka.dictionary.AniosDic;
import es.tikitaka.dictionary.ColegioDic;
import es.tikitaka.dictionary.HorasDic;
import es.tikitaka.dictionary.MunicipioDic;
import es.tikitaka.dictionary.PerfilDic;
import es.tikitaka.dictionary.PieDic;
import es.tikitaka.dictionary.PosicionDic;
import es.tikitaka.dictionary.ProvinciaDic;
import es.tikitaka.dictionary.TipoAmonestacionDic;
import es.tikitaka.dictionary.TipoGolDic;
import es.tikitaka.dictionary.TipoSancionDic;
import es.tikitaka.dictionary.TrofeoDic;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */

@Name("diccionarioAction")
@Scope(ScopeType.CONVERSATION)
public class DiccionarioAction {

	private int diccionario;
	private ProvinciaDic provincia;
	private List<ProvinciaDic> listaProvincias;

	private int totalRes;

	private boolean renAnio;
	private AniosDic newAnio;
	private AniosDic anio;
	private boolean editAnio;
	private boolean nuevoAnio;

	private ColegioDic newColegio;
	private ColegioDic colegio;
	private boolean editColegio;
	private boolean nuevoColegio;

	@DataModel("listaAnios")
	private List<AniosDic> listaAnios;
	@DataModelSelection("listaAnios")
	private AniosDic anioItem;

	@DataModel("listaColegios")
	private List<ColegioDic> listaColegios;
	@DataModelSelection("listaColegios")
	private ColegioDic colegioItem;

	@DataModel("listaHoras")
	private List<HorasDic> listaHoras;
	@DataModelSelection("listaHoras")
	private HorasDic horaItem;

	@DataModel("listaMunicipios")
	private List<MunicipioDic> listaMunicipios;
	@DataModelSelection("listaMunicipios")
	private MunicipioDic municipioItem;

	@DataModel("listaPerfiles")
	private List<PerfilDic> listaPerfiles;
	@DataModelSelection("listaPerfiles")
	private PerfilDic perfilItem;

	@DataModel("listaPies")
	private List<PieDic> listaPies;
	@DataModelSelection("listaPies")
	private PieDic pieITem;

	@DataModel("listaPosiciones")
	private List<PosicionDic> listaPosiciones;
	@DataModelSelection("listaPosiciones")
	private PosicionDic posicionItem;

	@DataModel("listaTiposAmonestaciones")
	private List<TipoAmonestacionDic> listaTiposAmonestaciones;
	@DataModelSelection("listaTiposAmonestaciones")
	private TipoAmonestacionDic tipoAmonestacionItem;

	@DataModel("listaTiposGoles")
	private List<TipoGolDic> listaTiposGoles;
	@DataModelSelection("listaTiposGoles")
	private TipoGolDic tipoGolItem;

	@DataModel("listaTiposSancion")
	private List<TipoSancionDic> listaTiposSancion;
	@DataModelSelection("listaTiposSancion")
	private TipoSancionDic tipoSancionItem;

	@DataModel("listaTrofeos")
	private List<TrofeoDic> listaTrofeos;
	@DataModelSelection("listaTrofeos")
	private TrofeoDic trofeoItem;

	@In(create = true)
	private AniosDicService aniosService;

	@In(create = true)
	private ColegiosDicService colegioService;

	@In(create = true)
	private HorasDicService horasService;

	@In(create = true)
	private MunicipioDicService municipioService;

	@In(create = true)
	private PerfilDicService perfilService;

	@In(create = true)
	private PieDicService pieService;

	@In(create = true)
	private PosicionDicService posicionService;

	@In(create = true)
	private ProvinciaDicService provinciaService;

	@In(create = true)
	private TipoAmonestacionDicService tipoAmonestacionService;

	@In(create = true)
	private TipoGolDicService tipoGolService;

	@In(create = true)
	private TipoSancionDicService tipoSancionService;

	@In(create = true)
	private TrofeoDicService trofeoService;

	/**
	 * Constructor por defecto
	 */
	public DiccionarioAction() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Método para buscar los datos de los diccionarios.
	 */
	public void buscar() {

		switch (diccionario) {
		case 0:
			FacesMessages.instance().add(
					"Debe seleccionar un diccionario de la lista.");
			break;
		case 1:
			listaAnios = aniosService.getList();
			totalRes = listaAnios.size();
			renAnio = true;
			break;
		case 2:
			listaColegios = colegioService.getList();
			totalRes = listaColegios.size();
			break;
		case 3:
			listaHoras = horasService.getList();
			totalRes = listaHoras.size();
			break;
		case 4:
			listaProvincias = provinciaService.getList();
			break;
		case 5:
			listaPerfiles = perfilService.getList();
			totalRes = listaPerfiles.size();
			break;
		case 6:
			listaPies = pieService.getList();
			totalRes = listaPies.size();
			break;
		case 7:
			listaPosiciones = posicionService.getList();
			totalRes = listaPosiciones.size();
			break;
		case 8:
			listaTiposAmonestaciones = tipoAmonestacionService.getList();
			totalRes = listaTiposAmonestaciones.size();
			break;
		case 9:
			listaTiposGoles = tipoGolService.getList();
			totalRes = listaTiposGoles.size();
			break;
		case 10:
			listaTiposSancion = tipoSancionService.getList();
			totalRes = listaTiposSancion.size();
			break;
		case 11:
			listaTrofeos = trofeoService.getList();
			totalRes = listaTrofeos.size();
			break;
		default:
			break;
		}

	}

	/**
	 * Método para añadir un nuevo año al diccionario de años
	 */
	public void addAnio() {
		newAnio = new AniosDic();
		nuevoAnio = true;
	}

	/**
	 * Método para eliminar un año del diccionario de años
	 */
	public void deleteAnio() {
		anio = anioItem;
		
		listaAnios.remove(anio);
		
		boolean b = aniosService.delete(anio.getId());
		if (b) {
			FacesMessages.instance().add(
					"El año seleccionado se ha eliminado correctamente");
		} else {
			FacesMessages.instance().add(
					"No se ha podido eliminar el año seleccionado");
		}
	}

	/**
	 * Método para editar un año del diccionario de años
	 */
	public void editAnio() {
		anio = anioItem;
		editAnio = true;
	}

	/**
	 * Método para aceptar la edición o creación de un nuevo año
	 */
	public void aceptarAnio() {
		if (nuevoAnio) {
			listaAnios.add(newAnio);
			totalRes = listaAnios.size();
		} else {
			// listaAnios.add(anio);
			totalRes = listaAnios.size();
		}
		nuevoAnio = false;
		editAnio = false;
	}

	public void cancelarAnio() {
		if (nuevoAnio) {
			newAnio = new AniosDic();
		} else {
			anio = new AniosDic();
		}
	}

	/**
	 * Método para añadir un nuevo colegio al diccionario de colegios
	 */
	public void addColegio() {
		newColegio = new ColegioDic();
		nuevoColegio = true;
	}

	/**
	 * Método para eliminar un colegio del diccionario de colegios
	 */
	public void deleteColegio() {
		colegio = colegioItem;
		boolean b = colegioService.delete(colegio.getId());
		if (b) {
			FacesMessages.instance().add(
					"El colegio seleccionado se ha eliminado correctamente.");
		} else {
			FacesMessages.instance().add(
					"No se ha podido eliminar el colegio seleccionado");
		}
	}

	/**
	 * Método para editear un colegio del diccionario de colegios
	 */
	public void editColegio() {
		colegio = colegioItem;
		editColegio = true;
	}

	/*
	 * getters and setters
	 */

	/**
	 * 
	 * @return
	 */
	public int getDiccionario() {
		return diccionario;
	}

	/**
	 * 
	 * @param diccionario
	 */
	public void setDiccionario(int diccionario) {
		this.diccionario = diccionario;
	}

	/**
	 * 
	 * @return
	 */
	public ProvinciaDic getProvincia() {
		return provincia;
	}

	/**
	 * 
	 * @param provincia
	 */
	public void setProvincia(ProvinciaDic provincia) {
		this.provincia = provincia;
	}

	/**
	 * 
	 * @return
	 */
	public List<ProvinciaDic> getListaProvincias() {
		return listaProvincias;
	}

	/**
	 * 
	 * @param listaProvincias
	 */
	public void setListaProvincias(List<ProvinciaDic> listaProvincias) {
		this.listaProvincias = listaProvincias;
	}

	/**
	 * 
	 * @return
	 */
	public int getTotalRes() {
		return totalRes;
	}

	/**
	 * 
	 * @param totalRes
	 */
	public void setTotalRes(int totalRes) {
		this.totalRes = totalRes;
	}

	/**
	 * 
	 * @return
	 */
	public boolean isRenAnio() {
		return renAnio;
	}

	/**
	 * 
	 * @param renAnio
	 */
	public void setRenAnio(boolean renAnio) {
		this.renAnio = renAnio;
	}

	/**
	 * 
	 * @return
	 */
	public AniosDic getNewAnio() {
		return newAnio;
	}

	/**
	 * 
	 * @param newAnio
	 */
	public void setNewAnio(AniosDic newAnio) {
		this.newAnio = newAnio;
	}

	/**
	 * 
	 * @return
	 */
	public AniosDic getAnio() {
		return anio;
	}

	/**
	 * 
	 * @param anio
	 */
	public void setAnio(AniosDic anio) {
		this.anio = anio;
	}

	/**
	 * 
	 * @return
	 */
	public boolean isNuevoAnio() {
		return nuevoAnio;
	}

	/**
	 * 
	 * @param nuevoAnio
	 */
	public void setNuevoAnio(boolean nuevoAnio) {
		this.nuevoAnio = nuevoAnio;
	}

	/**
	 * 
	 * @return
	 */
	public ColegioDic getNewColegio() {
		return newColegio;
	}

	/**
	 * 
	 * @param newColegio
	 */
	public void setNewColegio(ColegioDic newColegio) {
		this.newColegio = newColegio;
	}

	/**
	 * 
	 * @return
	 */
	public ColegioDic getColegio() {
		return colegio;
	}

	/**
	 * 
	 * @param colegio
	 */
	public void setColegio(ColegioDic colegio) {
		this.colegio = colegio;
	}

	/**
	 * 
	 * @return
	 */
	public boolean isEditColegio() {
		return editColegio;
	}

	/**
	 * 
	 * @param editColegio
	 */
	public void setEditColegio(boolean editColegio) {
		this.editColegio = editColegio;
	}

	/**
	 * 
	 * @return
	 */
	public boolean isNuevoColegio() {
		return nuevoColegio;
	}

	/**
	 * 
	 * @param nuevoColegio
	 */
	public void setNuevoColegio(boolean nuevoColegio) {
		this.nuevoColegio = nuevoColegio;
	}

	/**
	 * 
	 * @return
	 */
	public boolean isEditAnio() {
		return editAnio;
	}

	/**
	 * 
	 * @param editAnio
	 */
	public void setEditAnio(boolean editAnio) {
		this.editAnio = editAnio;
	}

	/**
	 * 
	 * @return
	 */
	public List<AniosDic> getListaAnios() {
		return listaAnios;
	}

	/**
	 * 
	 * @param listaAnios
	 */
	public void setListaAnios(List<AniosDic> listaAnios) {
		this.listaAnios = listaAnios;
	}

	/**
	 * 
	 * @return
	 */
	public AniosDic getAnioItem() {
		return anioItem;
	}

	/**
	 * 
	 * @param anioItem
	 */
	public void setAnioItem(AniosDic anioItem) {
		this.anioItem = anioItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<ColegioDic> getListaColegios() {
		return listaColegios;
	}

	/**
	 * 
	 * @param listaColegios
	 */
	public void setListaColegios(List<ColegioDic> listaColegios) {
		this.listaColegios = listaColegios;
	}

	/**
	 * 
	 * @return
	 */
	public ColegioDic getColegioItem() {
		return colegioItem;
	}

	/**
	 * 
	 * @param colegioItem
	 */
	public void setColegioItem(ColegioDic colegioItem) {
		this.colegioItem = colegioItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<HorasDic> getListaHoras() {
		return listaHoras;
	}

	/**
	 * 
	 * @param listaHoras
	 */
	public void setListaHoras(List<HorasDic> listaHoras) {
		this.listaHoras = listaHoras;
	}

	/**
	 * 
	 * @return
	 */
	public HorasDic getHoraItem() {
		return horaItem;
	}

	/**
	 * 
	 * @param horaItem
	 */
	public void setHoraItem(HorasDic horaItem) {
		this.horaItem = horaItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<MunicipioDic> getListaMunicipios() {
		if (provincia != null) {
			listaMunicipios = municipioService.getList(provincia);
			totalRes = listaMunicipios.size();
		}
		return listaMunicipios;
	}

	/**
	 * 
	 * @param listaMunicipios
	 */
	public void setListaMunicipios(List<MunicipioDic> listaMunicipios) {
		this.listaMunicipios = listaMunicipios;
	}

	/**
	 * 
	 * @return
	 */
	public MunicipioDic getMunicipioItem() {
		return municipioItem;
	}

	/**
	 * 
	 * @param municipioItem
	 */
	public void setMunicipioItem(MunicipioDic municipioItem) {
		this.municipioItem = municipioItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<PerfilDic> getListaPerfiles() {
		return listaPerfiles;
	}

	/**
	 * 
	 * @param listaPerfiles
	 */
	public void setListaPerfiles(List<PerfilDic> listaPerfiles) {
		this.listaPerfiles = listaPerfiles;
	}

	/**
	 * 
	 * @return
	 */
	public PerfilDic getPerfilItem() {
		return perfilItem;
	}

	/**
	 * 
	 * @param perfilItem
	 */
	public void setPerfilItem(PerfilDic perfilItem) {
		this.perfilItem = perfilItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<PieDic> getListaPies() {
		return listaPies;
	}

	/**
	 * 
	 * @param listaPies
	 */
	public void setListaPies(List<PieDic> listaPies) {
		this.listaPies = listaPies;
	}

	/**
	 * 
	 * @return
	 */
	public PieDic getPieITem() {
		return pieITem;
	}

	/**
	 * 
	 * @param pieITem
	 */
	public void setPieITem(PieDic pieITem) {
		this.pieITem = pieITem;
	}

	/**
	 * 
	 * @return
	 */
	public List<PosicionDic> getListaPosiciones() {
		return listaPosiciones;
	}

	/**
	 * 
	 * @param listaPosiciones
	 */
	public void setListaPosiciones(List<PosicionDic> listaPosiciones) {
		this.listaPosiciones = listaPosiciones;
	}

	/**
	 * 
	 * @return
	 */
	public PosicionDic getPosicionItem() {
		return posicionItem;
	}

	/**
	 * 
	 * @param posicionItem
	 */
	public void setPosicionItem(PosicionDic posicionItem) {
		this.posicionItem = posicionItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<TipoAmonestacionDic> getListaTiposAmonestaciones() {
		return listaTiposAmonestaciones;
	}

	/**
	 * 
	 * @param listaTiposAmonestaciones
	 */
	public void setListaTiposAmonestaciones(
			List<TipoAmonestacionDic> listaTiposAmonestaciones) {
		this.listaTiposAmonestaciones = listaTiposAmonestaciones;
	}

	/**
	 * 
	 * @return
	 */
	public TipoAmonestacionDic getTipoAmonestacionItem() {
		return tipoAmonestacionItem;
	}

	/**
	 * 
	 * @param tipoAmonestacionItem
	 */
	public void setTipoAmonestacionItem(TipoAmonestacionDic tipoAmonestacionItem) {
		this.tipoAmonestacionItem = tipoAmonestacionItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<TipoGolDic> getListaTiposGoles() {
		return listaTiposGoles;
	}

	/**
	 * 
	 * @param listaTiposGoles
	 */
	public void setListaTiposGoles(List<TipoGolDic> listaTiposGoles) {
		this.listaTiposGoles = listaTiposGoles;
	}

	/**
	 * 
	 * @return
	 */
	public TipoGolDic getTipoGolItem() {
		return tipoGolItem;
	}

	/**
	 * 
	 * @param tipoGolItem
	 */
	public void setTipoGolItem(TipoGolDic tipoGolItem) {
		this.tipoGolItem = tipoGolItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<TipoSancionDic> getListaTiposSancion() {
		return listaTiposSancion;
	}

	/**
	 * 
	 * @param listaTiposSancion
	 */
	public void setListaTiposSancion(List<TipoSancionDic> listaTiposSancion) {
		this.listaTiposSancion = listaTiposSancion;
	}

	/**
	 * 
	 * @return
	 */
	public TipoSancionDic getTipoSancionItem() {
		return tipoSancionItem;
	}

	/**
	 * 
	 * @param tipoSancionItem
	 */
	public void setTipoSancionItem(TipoSancionDic tipoSancionItem) {
		this.tipoSancionItem = tipoSancionItem;
	}

	/**
	 * 
	 * @return
	 */
	public List<TrofeoDic> getListaTrofeos() {
		return listaTrofeos;
	}

	/**
	 * 
	 * @param listaTrofeos
	 */
	public void setListaTrofeos(List<TrofeoDic> listaTrofeos) {
		this.listaTrofeos = listaTrofeos;
	}

	/**
	 * 
	 * @return
	 */
	public TrofeoDic getTrofeoItem() {
		return trofeoItem;
	}

	/**
	 * 
	 * @param trofeoItem
	 */
	public void setTrofeoItem(TrofeoDic trofeoItem) {
		this.trofeoItem = trofeoItem;
	}
}
